// 初始化插件

// 全局保存当前选中窗口
var g_iWndIndex = 0; //可以不用设置这个变量，有窗口参数的接口中，不用传值，开发包会默认使用当前选择窗口
var g_oLocalConfig = null; //本地配置

//错误码
//通用错误
var ERROR_CODE_UNKNOWN = 1000; //未知错误
var ERROR_CODE_NETWORKERROR = 1001; //网络错误
var ERROR_CODE_PARAMERROR = 1002; //缺少插件元素

//登录模块
var ERROR_CODE_LOGIN_NOLOGIN = 2000; // 未登录
var ERROR_CODE_LOGIN_REPEATLOGIN = 2001; //设备已登录，重复登录
var ERROR_CODE_LOGIN_NOSUPPORT = 2002; //当前设备不支持Digest登录

//预览播放
var ERROR_CODE_PLAY_PLUGININITFAIL = 3000; //插件初始化失败
var ERROR_CODE_PLAY_NOREPEATPLAY = 3001; //当前窗口已经在预览
var ERROR_CODE_PLAY_PLAYBACKABNORMAL = 3002; //回放异常
var ERROR_CODE_PLAY_PLAYBACKSTOP = 3003; //回放停止
var ERROR_CODE_PLAY_NOFREESPACE = 3004; //录像过程中，硬盘容量不足

//对讲
var ERROR_CODE_TALK_FAIL = 5000; //语音对讲失败

var version = "V3.3.0build20230322";
$(function () {
  // 初始化插件参数及插入插件
  WebVideoCtrl.I_InitPlugin({
    bEmbed: true,
    bWndFull: true, //是否支持单窗口双击全屏，默认支持 true:支持 false:不支持
    iWndowType: 1,
    // aIframe: ["test1"],
    cbSelWnd: function (xmlDoc) {
      g_iWndIndex = parseInt($(xmlDoc).find("SelectWnd").eq(0).text(), 10);
      var szInfo = "当前选择的窗口编号：" + g_iWndIndex;
      showCBInfo(szInfo);
    },
    cbDoubleClickWnd: function (iWndIndex, bFullScreen) {
      var szInfo = "当前放大的窗口编号：" + iWndIndex;
      if (!bFullScreen) {
        szInfo = "当前还原的窗口编号：" + iWndIndex;
      }
      showCBInfo(szInfo);
    },
    cbEvent: function (iEventType, iParam1, iParam2) {
      if (2 == iEventType) {
        // 回放正常结束
        showCBInfo("窗口" + iParam1 + "回放结束！");
      } else if (-1 == iEventType) {
        showCBInfo("设备" + iParam1 + "网络错误！");
      } else if (3001 == iEventType) {
        clickStopRecord(g_szRecordType, iParam1);
      }
    },
    cbInitPluginComplete: function () {
      WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin").then(
        () => {
          // 检查插件是否最新
          WebVideoCtrl.I_CheckPluginVersion().then((bFlag) => {
            if (bFlag) {
              alert(
                "检测到新的插件版本，双击开发包目录里的HCWebSDKPlugin.exe升级！"
              );
            }
          });
        },
        () => {
          alert(
            "插件初始化失败，请确认是否已安装插件；如果未安装，请双击开发包目录里的HCWebSDKPlugin.exe安装！"
          );
        }
      );
    },
  });

  // 窗口事件绑定
  $(window).bind({
    resize: function () {
      //WebVideoCtrl.I_Resize($("body").width(), $("body").height());
    },
  });

  //初始化日期时间
  var szCurTime = dateFormat(new Date(), "yyyy-MM-dd");
  $("#starttime").val(szCurTime + " 00:00:00");
  $("#endtime").val(szCurTime + " 23:59:59");
  $("#downloadstarttime").val(szCurTime + " 00:00:00");
  $("#downloadendtime").val(szCurTime + " 23:59:59");
});

// 显示操作信息
function showOPInfo(szInfo, status, xmlDoc) {
  var szTip =
    "<div>" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo;
  if (typeof status != "undefined" && status != 200) {
    var szStatusString = $(xmlDoc).find("statusString").eq(0).text();
    var szSubStatusCode = $(xmlDoc).find("subStatusCode").eq(0).text();
    if ("" === szSubStatusCode) {
      if ("" === szSubStatusCode && "" === szStatusString) {
        szTip += "(" + status + ")";
      } else {
        szTip += "(" + status + ", " + szStatusString + ")";
      }
    } else {
      szTip += "(" + status + ", " + szSubStatusCode + ")";
    }
  }
  szTip += "</div>";

  $("#opinfo").html(szTip + $("#opinfo").html());
}

// 显示回调信息
function showCBInfo(szInfo) {
  szInfo =
    "<div>" +
    dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") +
    " " +
    szInfo +
    "</div>";
  $("#cbinfo").html(szInfo + $("#cbinfo").html());
}

// 格式化时间
function dateFormat(oDate, fmt) {
  var o = {
    "M+": oDate.getMonth() + 1, //月份
    "d+": oDate.getDate(), //日
    "h+": oDate.getHours(), //小时
    "m+": oDate.getMinutes(), //分
    "s+": oDate.getSeconds(), //秒
    "q+": Math.floor((oDate.getMonth() + 3) / 3), //季度
    S: oDate.getMilliseconds(), //毫秒
  };
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(
      RegExp.$1,
      (oDate.getFullYear() + "").substr(4 - RegExp.$1.length)
    );
  }
  for (var k in o) {
    if (new RegExp("(" + k + ")").test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
      );
    }
  }
  return fmt;
}

// 获取窗口尺寸
function getWindowSize() {
  var nWidth = $(this).width() + $(this).scrollLeft(),
    nHeight = $(this).height() + $(this).scrollTop();

  return { width: nWidth, height: nHeight };
}

// 打开选择框 0：文件夹  1：文件
function clickOpenFileDlg(id, iType) {
  WebVideoCtrl.I_OpenFileDlg(iType).then(
    function (szDirPath) {
      if (szDirPath != -1 && szDirPath != "" && szDirPath != null) {
        $("#" + id).val(szDirPath);
      }
    },
    function () {
      showOPInfo("打开文件路径失败");
    }
  );
}

// 获取本地参数
function clickGetLocalCfg() {
  WebVideoCtrl.I_GetLocalCfg().then(
    (oLocalConfig) => {
      g_oLocalConfig = oLocalConfig;
      $("#netsPreach").val(oLocalConfig.buffNumberType);
      $("#wndSize").val(oLocalConfig.playWndType);
      $("#rulesInfo").val(oLocalConfig.ivsMode);
      $("#captureFileFormat").val(oLocalConfig.captureFileFormat);
      $("#packSize").val(oLocalConfig.packgeSize);
      $("#recordPath").val(oLocalConfig.recordPath);
      $("#downloadPath").val(oLocalConfig.downloadPath);
      $("#previewPicPath").val(oLocalConfig.capturePath);
      $("#playbackPicPath").val(oLocalConfig.playbackPicPath);
      $("#devicePicPath").val(oLocalConfig.deviceCapturePath);
      $("#playbackFilePath").val(oLocalConfig.playbackFilePath);
      $("#protocolType").val(oLocalConfig.protocolType);
      $("#ivsMode").val(oLocalConfig.ivsMode);
      $("#backOverlay").val(oLocalConfig.backOverlay);
      $("#secretKey").val("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F");
      showOPInfo("本地配置获取成功！");
    },
    (oError) => {
      var szInfo = "本地配置获取失败！";
      showOPInfo(szInfo, oError.errorCode, oError.errorMsg);
    }
  );
}

// 设置本地参数
async function clickSetLocalCfg() {
  g_oLocalConfig.buffNumberType = $("#netsPreach").val();
  g_oLocalConfig.playWndType = $("#wndSize").val();
  g_oLocalConfig.ivsMode = $("#rulesInfo").val();
  g_oLocalConfig.captureFileFormat = $("#captureFileFormat").val();
  g_oLocalConfig.packgeSize = $("#packSize").val();
  g_oLocalConfig.recordPath = $("#recordPath").val();
  g_oLocalConfig.downloadPath = $("#downloadPath").val();
  g_oLocalConfig.capturePath = $("#previewPicPath").val();
  g_oLocalConfig.playbackPicPath = $("#playbackPicPath").val();
  g_oLocalConfig.deviceCapturePath = $("#devicePicPath").val();
  g_oLocalConfig.playbackFilePath = $("#playbackFilePath").val();
  g_oLocalConfig.protocolType = $("#protocolType").val();
  g_oLocalConfig.ivsMode = $("#ivsMode").val();
  g_oLocalConfig.backOverlay = $("#backOverlay").val();
  if ("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F" !== $("#secretKey").val()) {
    g_oLocalConfig.secretKey = await WebVideoCtrl.I_GetEncryptString(
      $("#secretKey").val()
    );
  }
  WebVideoCtrl.I_SetLocalCfg(g_oLocalConfig).then(
    () => {
      showOPInfo("本地配置设置成功！");
    },
    (oError) => {
      var szInfo = "本地配置设置失败！";
      showOPInfo(szInfo, oError.errorCode, oError.errorMsg);
    }
  );
}

// 窗口分割数
function changeWndNum(iType) {
  if ("1*2" === iType || "2*1" === iType) {
    WebVideoCtrl.I_ArrangeWindow(iType).then(
      () => {
        showOPInfo("窗口分割成功！");
      },
      (oError) => {
        var szInfo = "窗口分割失败！";
        showOPInfo(szInfo, oError.errorCode, oError.errorMsg);
      }
    );
  } else {
    iType = parseInt(iType, 10);
    WebVideoCtrl.I_ChangeWndNum(iType).then(
      () => {
        showOPInfo("窗口分割成功！");
      },
      (oError) => {
        var szInfo = "窗口分割失败！";
        showOPInfo(szInfo, oError.errorCode, oError.errorMsg);
      }
    );
  }
}

// 登录
function clickLogin() {
  var szIP = $("#loginip").val(),
    szPort = $("#port").val(),
    szUsername = $("#username").val(),
    szPassword = $("#password").val();

  if ("" == szIP || "" == szPort) {
    return;
  }

  var szDeviceIdentify = szIP + "_" + szPort;

  WebVideoCtrl.I_Login(szIP, 1, szPort, szUsername, szPassword, {
    timeout: 3000,
    success: function (xmlDoc) {
      showOPInfo(szDeviceIdentify + " 登录成功！");
      $("#ip").prepend(
        "<option value='" +
        szDeviceIdentify +
        "'>" +
        szDeviceIdentify +
        "</option>"
      );
      setTimeout(function () {
        $("#ip").val(szDeviceIdentify);
        setTimeout(function () {
          getChannelInfo();
        }, 1000);
        getDevicePort();
      }, 10);
    },
    error: function (oError) {
      if (ERROR_CODE_LOGIN_REPEATLOGIN === status) {
        showOPInfo(szDeviceIdentify + " 已登录过！");
      } else {
        showOPInfo(
          szDeviceIdentify + " 登录失败！",
          oError.errorCode,
          oError.errorMsg
        );
      }
    },
  });
}

// 退出
function clickLogout() {
  var szDeviceIdentify = $("#ip").val();

  if (null == szDeviceIdentify) {
    return;
  }

  WebVideoCtrl.I_Logout(szDeviceIdentify).then(
    () => {
      showOPInfo(szDeviceIdentify + " " + "退出成功！");
    },
    () => {
      showOPInfo(szDeviceIdentify + " " + "退出失败！");
    }
  );
}

// 获取设备信息
function clickGetDeviceInfo() {
  var szDeviceIdentify = $("#ip").val();

  if (null == szDeviceIdentify) {
    return;
  }

  WebVideoCtrl.I_GetDeviceInfo(szDeviceIdentify, {
    success: function (xmlDoc) {
      var arrStr = [];
      arrStr.push(
        "设备名称：" + $(xmlDoc).find("deviceName").eq(0).text() + "\r\n"
      );
      arrStr.push(
        "设备ID：" + $(xmlDoc).find("deviceID").eq(0).text() + "\r\n"
      );
      arrStr.push("型号：" + $(xmlDoc).find("model").eq(0).text() + "\r\n");
      arrStr.push(
        "设备序列号：" + $(xmlDoc).find("serialNumber").eq(0).text() + "\r\n"
      );
      arrStr.push(
        "MAC地址：" + $(xmlDoc).find("macAddress").eq(0).text() + "\r\n"
      );
      arrStr.push(
        "主控版本：" +
        $(xmlDoc).find("firmwareVersion").eq(0).text() +
        " " +
        $(xmlDoc).find("firmwareReleasedDate").eq(0).text() +
        "\r\n"
      );
      arrStr.push(
        "编码版本：" +
        $(xmlDoc).find("encoderVersion").eq(0).text() +
        " " +
        $(xmlDoc).find("encoderReleasedDate").eq(0).text() +
        "\r\n"
      );

      showOPInfo(szDeviceIdentify + " 获取设备信息成功！");
      alert(arrStr.join(""));
    },
    error: function (oError) {
      showOPInfo(
        szDeviceIdentify + " 获取设备信息失败！",
        oError.errorCode,
        oError.errorMsg
      );
    },
  });
}

// 获取通道
function getChannelInfo() {
  var szDeviceIdentify = $("#ip").val(),
    oSel = $("#channels").empty();

  if (null == szDeviceIdentify) {
    return;
  }

  // 模拟通道
  WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {
    success: function (xmlDoc) {
      var oChannels = $(xmlDoc).find("VideoInputChannel");

      $.each(oChannels, function (i) {
        var id = $(this).find("id").eq(0).text(),
          name = $(this).find("name").eq(0).text();
        if ("" == name) {
          name = "Camera " + (i < 9 ? "0" + (i + 1) : i + 1);
        }
        oSel.append(
          "<option value='" + id + "' bZero='false'>" + name + "</option>"
        );
      });
      showOPInfo(szDeviceIdentify + " 获取模拟通道成功！");
    },
    error: function (oError) {
      showOPInfo(
        szDeviceIdentify + " 获取模拟通道失败！",
        oError.errorCode,
        oError.errorMsg
      );
    },
  });
  // 数字通道
  WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, {
    success: function (xmlDoc) {
      var oChannels = $(xmlDoc).find("InputProxyChannelStatus");

      $.each(oChannels, function (i) {
        var id = $(this).find("id").eq(0).text(),
          name = $(this).find("name").eq(0).text(),
          online = $(this).find("online").eq(0).text();
        if ("false" == online) {
          // 过滤禁用的数字通道
          return true;
        }
        if ("" == name) {
          name = "IPCamera " + (i < 9 ? "0" + (i + 1) : i + 1);
        }
        oSel.append(
          "<option value='" + id + "' bZero='false'>" + name + "</option>"
        );
      });
      showOPInfo(szDeviceIdentify + " 获取数字通道成功！");
    },
    error: function (oError) {
      showOPInfo(
        szDeviceIdentify + " 获取数字通道失败！",
        oError.errorCode,
        oError.errorMsg
      );
    },
  });
  // 零通道
  WebVideoCtrl.I_GetZeroChannelInfo(szDeviceIdentify, {
    success: function (xmlDoc) {
      var oChannels = $(xmlDoc).find("ZeroVideoChannel");

      $.each(oChannels, function (i) {
        var id = $(this).find("id").eq(0).text(),
          name = $(this).find("name").eq(0).text();
        if ("" == name) {
          name = "Zero Channel " + (i < 9 ? "0" + (i + 1) : i + 1);
        }
        if ("true" == $(this).find("enabled").eq(0).text()) {
          // 过滤禁用的零通道
          oSel.append(
            "<option value='" + id + "' bZero='true'>" + name + "</option>"
          );
        }
      });
      showOPInfo(szDeviceIdentify + " 获取零通道成功！");
    },
    error: function (oError) {
      showOPInfo(
        szDeviceIdentify + " 获取零通道失败！",
        oError.errorCode,
        oError.errorMsg
      );
    },
  });
}

// 获取端口
function getDevicePort() {
  var szDeviceIdentify = $("#ip").val();

  if (null == szDeviceIdentify) {
    return;
  }

  var oPort = WebVideoCtrl.I_GetDevicePort(szDeviceIdentify).then(
    (oPort) => {
      $("#deviceport").val(oPort.iDevicePort);
      $("#rtspport").val(oPort.iRtspPort);

      showOPInfo(szDeviceIdentify + " 获取端口成功！");
    },
    (oError) => {
      var szInfo = "获取端口失败！";
      showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
    }
  );
}

// 获取数字通道
async function clickGetDigitalChannelInfo() {
  var szDeviceIdentify = $("#ip").val(),
    iAnalogChannelNum = 0;

  $("#digitalchannellist").empty();

  if (null == szDeviceIdentify) {
    return;
  }

  // 模拟通道
  try {
    var oAnalogChannelInfo = await WebVideoCtrl.I_GetAnalogChannelInfo(
      szDeviceIdentify,
      {}
    );
    iAnalogChannelNum = $(oAnalogChannelInfo).find("VideoInputChannel").length;
  } finally {
    // 数字通道
    WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, {
      success: function (xmlDoc) {
        var oChannels = $(xmlDoc).find("InputProxyChannelStatus");

        $.each(oChannels, function () {
          var id = parseInt($(this).find("id").eq(0).text(), 10),
            ipAddress = $(this).find("ipAddress").eq(0).text(),
            srcInputPort = $(this).find("srcInputPort").eq(0).text(),
            managePortNo = $(this).find("managePortNo").eq(0).text(),
            online = $(this).find("online").eq(0).text(),
            proxyProtocol = $(this).find("proxyProtocol").eq(0).text();

          var objTr = $("#digitalchannellist").get(0).insertRow(-1);
          var objTd = objTr.insertCell(0);
          objTd.innerHTML =
            id - iAnalogChannelNum < 10
              ? "D0" + (id - iAnalogChannelNum)
              : "D" + (id - iAnalogChannelNum);
          objTd = objTr.insertCell(1);
          objTd.width = "25%";
          objTd.innerHTML = ipAddress;
          objTd = objTr.insertCell(2);
          objTd.width = "15%";
          objTd.innerHTML = srcInputPort;
          objTd = objTr.insertCell(3);
          objTd.width = "20%";
          objTd.innerHTML = managePortNo;
          objTd = objTr.insertCell(4);
          objTd.width = "15%";
          objTd.innerHTML = "true" == online ? "在线" : "离线";
          objTd = objTr.insertCell(5);
          objTd.width = "25%";
          objTd.innerHTML = proxyProtocol;
        });
        showOPInfo(szDeviceIdentify + " 获取数字通道成功！");
      },
      error: function (oError) {
        showOPInfo(
          szDeviceIdentify + " 没有数字通道！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}
// 开始预览
function clickStartRealPlay(iStreamType) {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szDeviceIdentify = $("#ip").val(),
    iRtspPort = parseInt($("#rtspport").val(), 10),
    iChannelID = parseInt($("#channels").val(), 10),
    bZeroChannel =
      $("#channels option")
        .eq($("#channels").get(0).selectedIndex)
        .attr("bZero") == "true"
        ? true
        : false,
    szInfo = "";

  if ("undefined" === typeof iStreamType) {
    iStreamType = parseInt($("#streamtype").val(), 10);
  }

  if (null == szDeviceIdentify) {
    return;
  }
  var startRealPlay = function () {
    WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, {
      iStreamType: iStreamType,
      iChannelID: iChannelID,
      bZeroChannel: bZeroChannel,
      iPort: iRtspPort,
      success: function () {
        szInfo = "开始预览成功！";
        showOPInfo(szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        showOPInfo(
          szDeviceIdentify + " 开始预览失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  };

  if (oWndInfo != null) {
    // 已经在播放了，先停止
    WebVideoCtrl.I_Stop({
      success: function () {
        startRealPlay();
      },
    });
  } else {
    startRealPlay();
  }
}
function setTextOverlay() {
  var szDeviceIdentify = $("#ip").val();
  var szInfo = "";
  var that = this;
  var iChannelID = parseInt($("#channels").val(), 10);
  var szUrl = "ISAPI/System/Video/inputs/channels/" + iChannelID + "/overlays";
  WebVideoCtrl.I_GetTextOverlay(szUrl, szDeviceIdentify, {
    success: function (data) {
      $(data).find("TextOverlay").eq(0).find("displayText").eq(0).text("我tet");
      $(data).find("TextOverlay").eq(0).find("positionX").eq(0).text("20");
      $(data).find("TextOverlay").eq(0).find("positionY").eq(0).text("30");
      var xmldoc = toXMLStr(data);
      var newOptions = {
        type: "PUT",
        data: xmldoc,
        success: function () {
          szInfo = "绘制osd信息成功";
          showOPInfo(szDeviceIdentify + " " + szInfo);
        },
        error: function (oError) {
          showOPInfo(
            szDeviceIdentify + " 设置osd信息失败！",
            oError.errorCode,
            oError.errorMsg
          );
        },
      };

      WebVideoCtrl.I_SendHTTPRequest(szDeviceIdentify, szUrl, newOptions);
    },
    error: function (oError) {
      showOPInfo(
        szDeviceIdentify + " 设置osd信息失败！",
        oError.errorCode,
        oError.errorMsg
      );
    },
  });
}
// 停止预览
function clickStopRealPlay() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_Stop({
      success: function () {
        szInfo = "停止预览成功！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        showOPInfo(
          szDeviceIdentify + " 停止预览失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 打开声音
function clickOpenSound() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    var allWndInfo = WebVideoCtrl.I_GetWindowStatus();
    // 循环遍历所有窗口，如果有窗口打开了声音，先关闭
    for (var i = 0, iLen = allWndInfo.length; i < iLen; i++) {
      oWndInfo = allWndInfo[i];
      if (oWndInfo.bSound) {
        WebVideoCtrl.I_CloseSound(oWndInfo.iIndex);
        break;
      }
    }

    WebVideoCtrl.I_OpenSound().then(
      () => {
        showOPInfo(oWndInfo.szDeviceIdentify + " " + "打开声音成功！");
      },
      (oError) => {
        var szInfo = " 打开声音失败！";
        showOPInfo(
          oWndInfo.szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      }
    );
  }
}

// 关闭声音
function clickCloseSound() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_CloseSound().then(
      () => {
        showOPInfo(oWndInfo.szDeviceIdentify + " " + "关闭声音成功！");
      },
      (oError) => {
        var szInfo = " 关闭声音失败！";
        showOPInfo(
          oWndInfo.szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      }
    );
  }
}

// 设置音量
function clickSetVolume() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    iVolume = parseInt($("#volume").val(), 10),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_SetVolume(iVolume).then(
      () => {
        showOPInfo(oWndInfo.szDeviceIdentify + " " + "设置音量成功");
      },
      (oError) => {
        var szInfo = " 设置音量失败！";
        showOPInfo(
          oWndInfo.szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      }
    );
  }
}

// 抓图
async function clickCapturePic(szType) {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    var oLocalConfig = await WebVideoCtrl.I_GetLocalCfg();
    var szCaptureFileFormat = "0";
    if (oLocalConfig) {
      szCaptureFileFormat = oLocalConfig.captureFileFormat;
    }

    var szChannelID = $("#channels").val();
    var szPicName =
      oWndInfo.szDeviceIdentify +
      "_" +
      szChannelID +
      "_" +
      new Date().getTime();
    //如果是回放抓图，需要增加如下前缀："playback_"
    if ("playback" === szType) {
      szPicName =
        "playback_" +
        oWndInfo.szDeviceIdentify +
        "_" +
        szChannelID +
        "_" +
        new Date().getTime();
    }

    szPicName += "0" === szCaptureFileFormat ? ".jpg" : ".bmp";

    WebVideoCtrl.I_CapturePic(szPicName, {
      bDateDir: true, //是否生成日期文件
    }).then(
      function () {
        szInfo = "抓图成功！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      function (oError) {
        szInfo = " 抓图失败！";
        showOPInfo(
          oWndInfo.szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      }
    );
  }
}
// 抓图
function clickCapturePicData() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";
  if (oWndInfo != null) {
    WebVideoCtrl.I_CapturePicData().then(
      function (data) {
        console.log(data);
        szInfo = "抓图上传成功！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      function () {
        szInfo = "抓图失败！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      }
    );
  }
}

// 开始录像
var g_szRecordType = "";
function clickStartRecord(szType) {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  g_szRecordType = szType;

  if (oWndInfo != null) {
    var szChannelID = $("#channels").val(),
      szFileName =
        oWndInfo.szDeviceIdentify +
        "_" +
        szChannelID +
        "_" +
        new Date().getTime();

    WebVideoCtrl.I_StartRecord(szFileName, {
      bDateDir: true, //是否生成日期文件
      success: function () {
        if ("realplay" === szType) {
          szInfo = "开始录像成功！";
        } else if ("playback" === szType) {
          szInfo = "开始剪辑成功！";
        }
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        if ("realplay" === szType) {
          szInfo = " 开始录像失败！";
        } else if ("playback" === szType) {
          szInfo = " 开始剪辑失败！";
        }
        showOPInfo(
          szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 停止录像
function clickStopRecord(szType, iWndIndex) {
  if ("undefined" === typeof iWndIndex) {
    iWndIndex = g_iWndIndex;
  }
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_StopRecord({
      success: function () {
        if ("realplay" === szType) {
          szInfo = "停止录像成功！";
        } else if ("playback" === szType) {
          szInfo = "停止剪辑成功！";
        }
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        if ("realplay" === szType) {
          szInfo = "停止录像失败！";
        } else if ("playback" === szType) {
          szInfo = "停止剪辑失败！";
        }
        sshowOPInfo(
          szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 获取对讲通道
function clickGetAudioInfo() {
  var szDeviceIdentify = $("#ip").val();

  if (null == szDeviceIdentify) {
    return;
  }

  WebVideoCtrl.I_GetAudioInfo(szDeviceIdentify, {
    success: function (xmlDoc) {
      var oAudioChannels = $(xmlDoc).find("TwoWayAudioChannel"),
        oSel = $("#audiochannels").empty();
      $.each(oAudioChannels, function () {
        var id = $(this).find("id").eq(0).text();

        oSel.append("<option value='" + id + "'>" + id + "</option>");
      });
      showOPInfo(szDeviceIdentify + " 获取对讲通道成功！");
    },
    error: function (oError) {
      showOPInfo(
        szDeviceIdentify + " 获取对讲通道失败！",
        oError.errorCode,
        oError.errorMsg
      );
    },
  });
}

// 开始对讲
function clickStartVoiceTalk() {
  var szDeviceIdentify = $("#ip").val(),
    iAudioChannel = parseInt($("#audiochannels").val(), 10),
    szInfo = "";

  if (null == szDeviceIdentify) {
    return;
  }

  if (isNaN(iAudioChannel)) {
    alert("请选择对讲通道！");
    return;
  }

  WebVideoCtrl.I_StartVoiceTalk(szDeviceIdentify, iAudioChannel).then(
    () => {
      szInfo = "开始对讲成功！";
      showOPInfo(szDeviceIdentify + " " + szInfo);
    },
    (oError) => {
      var szInfo = " 开始对讲失败！";
      showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
    }
  );
}

// 停止对讲
function clickStopVoiceTalk() {
  var szDeviceIdentify = $("#ip").val();
  WebVideoCtrl.I_StopVoiceTalk().then(
    () => {
      szInfo = "停止对讲成功！";
      showOPInfo(szDeviceIdentify + " " + szInfo);
    },
    (oError) => {
      var szInfo = " 停止对讲失败！";
      showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
    }
  );
}

// 启用电子放大
function clickEnableEZoom() {
  var szDeviceIdentify = $("#ip").val();
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_EnableEZoom().then(
      () => {
        szInfo = "启用电子放大成功！";
        showOPInfo(szDeviceIdentify + " " + szInfo);
      },
      (oError) => {
        szInfo = "启用电子放大失败！";
        showOPInfo(
          szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      }
    );
  }
}

// 禁用电子放大
function clickDisableEZoom() {
  var szDeviceIdentify = $("#ip").val();
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_DisableEZoom().then(
      () => {
        szInfo = "禁用电子放大成功！";
        showOPInfo(szDeviceIdentify + " " + szInfo);
      },
      (oError) => {
        szInfo = "禁用电子放大失败！";
        showOPInfo(
          szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      }
    );
  }
}

// 启用3D放大
function clickEnable3DZoom() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";
  var szDeviceIdentify = $("#ip").val();

  if (oWndInfo != null) {
    WebVideoCtrl.I_Enable3DZoom().then(
      () => {
        szInfo = "启用3D放大成功！";
        showOPInfo(szDeviceIdentify + " " + szInfo);
      },
      (oError) => {
        szInfo = "启用3D放大失败！";
        showOPInfo(
          szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      }
    );
  }
}

// 禁用3D放大
function clickDisable3DZoom() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";
  var szDeviceIdentify = $("#ip").val();

  if (oWndInfo != null) {
    WebVideoCtrl.I_Disable3DZoom().then(
      () => {
        szInfo = "禁用3D放大成功！";
        showOPInfo(szDeviceIdentify + " " + szInfo);
      },
      (oError) => {
        szInfo = "禁用3D放大失败！";
        showOPInfo(
          szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      }
    );
  }
}

// 全屏
function clickFullScreen() {
  WebVideoCtrl.I_FullScreen(true).then(
    () => {
      showOPInfo("全屏成功");
    },
    (oError) => {
      showOPInfo("全屏失败！", oError.errorCode, oError.errorMsg);
    }
  );
}

// PTZ控制 9为自动，1,2,3,4,5,6,7,8为方向PTZ
var g_bPTZAuto = false;
function mouseDownPTZControl(iPTZIndex) {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    bZeroChannel =
      $("#channels option")
        .eq($("#channels").get(0).selectedIndex)
        .attr("bZero") == "true"
        ? true
        : false,
    iPTZSpeed = $("#ptzspeed").val();

  if (bZeroChannel) {
    // 零通道不支持云台
    return;
  }

  if (oWndInfo != null) {
    if (9 == iPTZIndex && g_bPTZAuto) {
      iPTZSpeed = 0; // 自动开启后，速度置为0可以关闭自动
    } else {
      g_bPTZAuto = false; // 点击其他方向，自动肯定会被关闭
    }

    WebVideoCtrl.I_PTZControl(iPTZIndex, false, {
      iPTZSpeed: iPTZSpeed,
      success: function (xmlDoc) {
        if (9 == iPTZIndex && g_bPTZAuto) {
          showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台成功！");
        } else {
          showOPInfo(oWndInfo.szDeviceIdentify + " 开启云台成功！");
        }
        if (9 == iPTZIndex) {
          g_bPTZAuto = !g_bPTZAuto;
        }
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + " 开启云台失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 方向PTZ停止
function mouseUpPTZControl() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(1, true, {
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + " 停止云台失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 设置预置点
function clickSetPreset() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    iPresetID = parseInt($("#preset").val(), 10);

  if (oWndInfo != null) {
    WebVideoCtrl.I_SetPreset(iPresetID, {
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 设置预置点成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + " 设置预置点失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 调用预置点
function clickGoPreset() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    iPresetID = parseInt($("#preset").val(), 10);

  if (oWndInfo != null) {
    WebVideoCtrl.I_GoPreset(iPresetID, {
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 调用预置点成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + " 调用预置点失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 搜索录像
var g_iSearchTimes = 0;
function clickRecordSearch(iType) {
  var szDeviceIdentify = $("#ip").val(),
    iChannelID = parseInt($("#channels").val(), 10),
    bZeroChannel =
      $("#channels option")
        .eq($("#channels").get(0).selectedIndex)
        .attr("bZero") == "true"
        ? true
        : false,
    iStreamType = parseInt($("#record_streamtype").val(), 10),
    szStartTime = $("#starttime").val(),
    szEndTime = $("#endtime").val();
  if (
    Date.parse(szEndTime.replace(/-/g, "/")) -
    Date.parse(szStartTime.replace(/-/g, "/")) <
    0
  ) {
    alert("开始时间大于结束时间");
    return;
  }
  if (null == szDeviceIdentify) {
    return;
  }

  if (bZeroChannel) {
    // 零通道不支持录像搜索
    return;
  }

  if (0 == iType) {
    // 首次搜索
    $("#searchlist").empty();
    g_iSearchTimes = 0;
  }

  //如果是前端设备，需要将搜索时间转换为UTC时间
  WebVideoCtrl.I_RecordSearch(
    szDeviceIdentify,
    iChannelID,
    szStartTime,
    szEndTime,
    {
      iStreamType: iStreamType,
      iSearchPos: g_iSearchTimes,
      success: function (xmlDoc) {
        if ("MORE" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) {
          for (
            var i = 0, nLen = $(xmlDoc).find("searchMatchItem").length;
            i < nLen;
            i++
          ) {
            var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text();
            if (szPlaybackURI.indexOf("name=") < 0) {
              break;
            }
            var szStartTime = $(xmlDoc).find("startTime").eq(i).text();
            var szEndTime = $(xmlDoc).find("endTime").eq(i).text();
            var szFileName = szPlaybackURI.substring(
              szPlaybackURI.indexOf("name=") + 5,
              szPlaybackURI.indexOf("&size=")
            );

            var objTr = $("#searchlist").get(0).insertRow(-1);
            var objTd = objTr.insertCell(0);
            objTd.id = "downloadTd" + i;
            objTd.innerHTML = g_iSearchTimes + 1;
            objTd = objTr.insertCell(1);
            objTd.width = "30%";
            objTd.innerHTML = szFileName;
            objTd = objTr.insertCell(2);
            objTd.width = "30%";
            objTd.innerHTML = szStartTime.replace("T", " ").replace("Z", "");
            objTd = objTr.insertCell(3);
            objTd.width = "30%";
            objTd.innerHTML = szEndTime.replace("T", " ").replace("Z", "");
            objTd = objTr.insertCell(4);
            objTd.width = "10%";
            objTd.innerHTML =
              "<a href='javascript:;' onclick='clickStartDownloadRecord(" +
              g_iSearchTimes +
              ");'>下载</a>";
            $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName);
            $("#downloadTd" + g_iSearchTimes).data(
              "playbackURI",
              szPlaybackURI
            );
            ++g_iSearchTimes;
          }

          clickRecordSearch(1); // 继续搜索
        } else if ("OK" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) {
          var iLength = $(xmlDoc).find("searchMatchItem").length;
          for (var i = 0; i < iLength; i++) {
            var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text();
            if (szPlaybackURI.indexOf("name=") < 0) {
              break;
            }
            var szStartTime = $(xmlDoc).find("startTime").eq(i).text();
            var szEndTime = $(xmlDoc).find("endTime").eq(i).text();
            var szFileName = szPlaybackURI.substring(
              szPlaybackURI.indexOf("name=") + 5,
              szPlaybackURI.indexOf("&size=")
            );

            var objTr = $("#searchlist").get(0).insertRow(-1);
            var objTd = objTr.insertCell(0);
            objTd.id = "downloadTd" + i;
            objTd.innerHTML = g_iSearchTimes + 1;
            objTd = objTr.insertCell(1);
            objTd.width = "30%";
            objTd.innerHTML = szFileName;
            objTd = objTr.insertCell(2);
            objTd.width = "30%";
            objTd.innerHTML = szStartTime.replace("T", " ").replace("Z", "");
            objTd = objTr.insertCell(3);
            objTd.width = "30%";
            objTd.innerHTML = szEndTime.replace("T", " ").replace("Z", "");
            objTd = objTr.insertCell(4);
            objTd.width = "10%";
            objTd.innerHTML =
              "<a href='javascript:;' onclick='clickStartDownloadRecord(" +
              g_iSearchTimes +
              ");'>下载</a>";
            $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName);
            $("#downloadTd" + g_iSearchTimes).data(
              "playbackURI",
              szPlaybackURI
            );
            ++g_iSearchTimes;
          }
          showOPInfo(szDeviceIdentify + " 搜索录像文件成功！");
        } else if (
          "NO MATCHES" === $(xmlDoc).find("responseStatusStrg").eq(0).text()
        ) {
          setTimeout(function () {
            g_iSearchTimes = 0;
            showOPInfo(szDeviceIdentify + " 没有录像文件！");
          }, 50);
        }
      },
      error: function (oError) {
        g_iSearchTimes = 0;
        showOPInfo(
          szDeviceIdentify + " 搜索录像文件失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    }
  );
}

// 开始回放
function clickStartPlayback() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szDeviceIdentify = $("#ip").val(),
    iRtspPort = parseInt($("#rtspport").val(), 10),
    iStreamType = parseInt($("#record_streamtype").val(), 10),
    bZeroChannel =
      $("#channels option")
        .eq($("#channels").get(0).selectedIndex)
        .attr("bZero") == "true"
        ? true
        : false,
    iChannelID = parseInt($("#channels").val(), 10),
    szStartTime = $("#starttime").val(),
    szEndTime = $("#endtime").val(),
    szInfo = "",
    bChecked = $("#transstream").prop("checked"),
    iRet = -1;

  if (null == szDeviceIdentify) {
    return;
  }

  if (bZeroChannel) {
    // 零通道不支持回放
    return;
  }

  var startPlayback = function () {
    if (bChecked) {
      // 启用转码回放
      var oTransCodeParam = {
        TransFrameRate: "14", // 0：全帧率，5：1，6：2，7：4，8：6，9：8，10：10，11：12，12：16，14：15，15：18，13：20，16：22
        TransResolution: "1", // 255：Auto，3：4CIF，2：QCIF，1：CIF
        TransBitrate: "19", // 2：32K，3：48K，4：64K，5：80K，6：96K，7：128K，8：160K，9：192K，10：224K，11：256K，12：320K，13：384K，14：448K，15：512K，16：640K，17：768K，18：896K，19：1024K，20：1280K，21：1536K，22：1792K，23：2048K，24：3072K，25：4096K，26：8192K
      };
      WebVideoCtrl.I_StartPlayback(szDeviceIdentify, {
        iRtspPort: iRtspPort,
        iStreamType: iStreamType,
        iChannelID: iChannelID,
        szStartTime: szStartTime,
        szEndTime: szEndTime,
        oTransCodeParam: oTransCodeParam,
        success: function () {
          szInfo = "开始回放成功！";
          showOPInfo(szDeviceIdentify + " " + szInfo);
        },
        error: function (oError) {
          szInfo = "开始回放失败！";
          showOPInfo(
            szDeviceIdentify + szInfo,
            oError.errorCode,
            oError.errorMsg
          );
        },
      });
    } else {
      WebVideoCtrl.I_StartPlayback(szDeviceIdentify, {
        iRtspPort: iRtspPort,
        iStreamType: iStreamType,
        iChannelID: iChannelID,
        szStartTime: szStartTime,
        szEndTime: szEndTime,
        success: function () {
          szInfo = "开始回放成功！";
          showOPInfo(szDeviceIdentify + " " + szInfo);
        },
        error: function (oError) {
          szInfo = "开始回放失败！";
          showOPInfo(
            szDeviceIdentify + szInfo,
            oError.errorCode,
            oError.errorMsg
          );
        },
      });
    }
  };

  if (oWndInfo != null) {
    // 已经在播放了，先停止
    WebVideoCtrl.I_Stop({
      success: function () {
        startPlayback();
      },
    });
  } else {
    startPlayback();
  }
}

// 停止回放
function clickStopPlayback() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_Stop({
      success: function () {
        szInfo = "停止回放成功！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        szInfo = "停止回放失败！";
        showOPInfo(
          szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 开始倒放
function clickReversePlayback() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szDeviceIdentify = $("#ip").val(),
    iRtspPort = parseInt($("#rtspport").val(), 10),
    iStreamType = parseInt($("#record_streamtype").val(), 10),
    bZeroChannel =
      $("#channels option")
        .eq($("#channels").get(0).selectedIndex)
        .attr("bZero") == "true"
        ? true
        : false,
    iChannelID = parseInt($("#channels").val(), 10),
    szStartTime = $("#starttime").val(),
    szEndTime = $("#endtime").val(),
    szInfo = "";

  if (null == szDeviceIdentify) {
    return;
  }

  if (bZeroChannel) {
    // 零通道不支持倒放
    return;
  }

  var reversePlayback = function () {
    WebVideoCtrl.I_ReversePlayback(szDeviceIdentify, {
      iRtspPort: iRtspPort,
      iStreamType: iStreamType,
      iChannelID: iChannelID,
      szStartTime: szStartTime,
      szEndTime: szEndTime,
    }).then(
      () => {
        szInfo = "开始倒放成功！";
        showOPInfo(szDeviceIdentify + " " + szInfo);
      },
      (oError) => {
        szInfo = "开始倒放失败！";
        showOPInfo(
          szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      }
    );
  };

  if (oWndInfo != null) {
    // 已经在播放了，先停止
    WebVideoCtrl.I_Stop({
      success: function () {
        reversePlayback();
      },
    });
  } else {
    reversePlayback();
  }
}

// 单帧
function clickFrame() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_Frame({
      success: function () {
        szInfo = "单帧播放成功！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        szInfo = "单帧播放失败！";
        showOPInfo(
          szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 暂停
function clickPause() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_Pause({
      success: function () {
        szInfo = "暂停成功！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        szInfo = "暂停失败！";
        showOPInfo(
          oWndInfo.szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 恢复
function clickResume() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_Resume({
      success: function () {
        szInfo = "恢复成功！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        szInfo = "恢复失败！";
        showOPInfo(
          oWndInfo.szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 慢放
function clickPlaySlow() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_PlaySlow({
      success: function () {
        szInfo = "慢放成功！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        szInfo = "慢放失败！";
        showOPInfo(
          oWndInfo.szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 快放
function clickPlayFast() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
    szInfo = "";

  if (oWndInfo != null) {
    WebVideoCtrl.I_PlayFast({
      success: function () {
        szInfo = "快放成功！";
        showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
      },
      error: function (oError) {
        szInfo = "快放失败！";
        showOPInfo(
          oWndInfo.szDeviceIdentify + szInfo,
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// OSD时间
function clickGetOSDTime() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_GetOSDTime({
      success: function (szOSDTime) {
        $("#osdtime").val(szOSDTime);
        showOPInfo(oWndInfo.szDeviceIdentify + " 获取OSD时间成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + " 获取OSD时间失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 下载录像
var g_iDownloadID = -1;
var g_tDownloadProcess = 0;
function clickStartDownloadRecord(i) {
  var szDeviceIdentify = $("#ip").val(),
    szChannelID = $("#channels").val(),
    szFileName = $("#downloadTd" + i).data("fileName"),
    szPlaybackURI = $("#downloadTd" + i).data("playbackURI");

  if (null == szDeviceIdentify) {
    return;
  }

  WebVideoCtrl.I_StartDownloadRecord(
    szDeviceIdentify,
    szPlaybackURI,
    szFileName,
    {
      bDateDir: true, //是否生成日期文件
    }
  ).then(
    (iDownloadID) => {
      g_iDownloadID = iDownloadID;
      $("<div id='downProcess' class='freeze'></div>").appendTo("body");
      g_tDownloadProcess = setInterval("downProcess(" + i + ")", 1000);
    },
    (oError) => {
      WebVideoCtrl.I_GetLastError().then((iErrorValue) => {
        if (34 == iErrorValue) {
          showOPInfo(szDeviceIdentify + " 已下载！");
        } else if (33 == iErrorValue) {
          showOPInfo(szDeviceIdentify + " 空间不足！");
        } else {
          showOPInfo(szDeviceIdentify + " 下载失败！");
        }
      });
    }
  );
}
function clickStartDownloadRecordByTime() {
  var szDeviceIdentify = $("#ip").val(),
    szChannelID = $("#channels").val(),
    szFileName = $("#downloadTd0").data("fileName"),
    szPlaybackURI = $("#downloadTd0").data("playbackURI"),
    szStartTime = $("#downloadstarttime").val(),
    szEndTime = $("#downloadendtime").val();
  if (null == szDeviceIdentify) {
    return;
  }
  if (
    Date.parse(szEndTime.replace(/-/g, "/")) -
    Date.parse(szStartTime.replace(/-/g, "/")) <
    0
  ) {
    alert("开始时间大于结束时间");
    return;
  }
  WebVideoCtrl.I_StartDownloadRecordByTime(
    szDeviceIdentify,
    szPlaybackURI,
    szFileName,
    szStartTime,
    szEndTime,
    {
      bDateDir: true, //是否生成日期文件
    }
  ).then(
    (iDownloadID) => {
      g_iDownloadID = iDownloadID;
      $("<div id='downProcess' class='freeze'></div>").appendTo("body");
      g_tDownloadProcess = setInterval("downProcess(" + 0 + ")", 1000);
    },
    (oError) => {
      showOPInfo(szDeviceIdentify + " 下载失败！");
    }
  );
}

function clickStopDownload() {
  WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID).then(
    () => {
      showOPInfo("停止下载成功！");
      clearInterval(g_tDownloadProcess);
      g_tDownloadProcess = 0;
      g_iDownloadID = -1;
      $("#downProcess").remove();
    },
    (oError) => {
      showOPInfo(
        szDeviceIdentify + " 停止下载失败！",
        oError.errorCode,
        oError.errorMsg
      );
    }
  );
}
// 下载进度
async function downProcess() {
  var iStatus = await WebVideoCtrl.I_GetDownloadStatus(g_iDownloadID);
  if (0 == iStatus) {
    $("#downProcess").css({
      width: $("#searchlist").width() + "px",
      height: "100px",
      lineHeight: "100px",
      left: $("#searchdiv").offset().left + "px",
      top: $("#searchdiv").offset().top + "px",
    });
    var iProcess = await WebVideoCtrl.I_GetDownloadProgress(g_iDownloadID);
    if (iProcess < 0) {
      clearInterval(g_tDownloadProcess);
      g_tDownloadProcess = 0;
      g_iDownloadID = -1;
    } else if (iProcess < 100) {
      $("#downProcess").text(iProcess + "%");
    } else {
      $("#downProcess").text("100%");
      setTimeout(function () {
        $("#downProcess").remove();
      }, 1000);

      await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID);

      showOPInfo("录像下载完成！");
      clearInterval(g_tDownloadProcess);
      g_tDownloadProcess = 0;
      g_iDownloadID = -1;
    }
  } else {
    await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID);

    clearInterval(g_tDownloadProcess);
    g_tDownloadProcess = 0;
    g_iDownloadID = -1;
  }
}

// 导出配置文件
function clickExportDeviceConfig() {
  var szDeviceIdentify = $("#ip").val(),
    szInfo = "";

  if (null == szDeviceIdentify) {
    return;
  }
  var szDevicePassWord = $("#edfpassword").val();

  WebVideoCtrl.I_ExportDeviceConfig(szDeviceIdentify, szDevicePassWord).then(
    () => {
      szInfo = "导出配置文件成功！";
      showOPInfo(szDeviceIdentify + " " + szInfo);
    },
    (oError) => {
      szInfo = "导出配置文件失败！";
      showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
    }
  );
}

// 导入配置文件
function clickImportDeviceConfig() {
  var szDeviceIdentify = $("#ip").val(),
    szFileName = $("#configFile").val(),
    szDevicePassWord = $("#edfpassword").val(),
    szInfo = "";
  if (null == szDeviceIdentify) {
    return;
  }

  if ("" == szFileName) {
    alert("请选择配置文件！");
    return;
  }

  WebVideoCtrl.I_ImportDeviceConfig(
    szDeviceIdentify,
    szFileName,
    szDevicePassWord
  ).then(
    () => {
      szInfo = "导入成功！";
      showOPInfo(szDeviceIdentify + " " + szInfo);
      WebVideoCtrl.I_Restart(szDeviceIdentify, {
        success: function (xmlDoc) {
          $("<div id='restartDiv' class='freeze'>重启中...</div>").appendTo(
            "body"
          );
          var oSize = getWindowSize();
          $("#restartDiv").css({
            width: oSize.width + "px",
            height: oSize.height + "px",
            lineHeight: oSize.height + "px",
            left: 0,
            top: 0,
          });
          setTimeout("reconnect('" + szDeviceIdentify + "')", 20000);
        },
        error: function (oError) {
          showOPInfo(
            szDeviceIdentify + " 重启失败！",
            oError.errorCode,
            oError.errorMsg
          );
        },
      });
    },
    (oError) => {
      szInfo = "导入失败！";
      showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
    }
  );
}

// 重连
function reconnect(szDeviceIdentify) {
  WebVideoCtrl.I_Reconnect(szDeviceIdentify, {
    timeout: 3000,
    success: function (xmlDoc) {
      $("#restartDiv").remove();
    },
    error: function () {
      setTimeout(function () {
        reconnect(szDeviceIdentify);
      }, 5000);
    },
  });
}

// 开始升级
var g_tUpgrade = 0;
function clickStartUpgrade(szDeviceIdentify) {
  var szDeviceIdentify = $("#ip").val(),
    szFileName = $("#upgradeFile").val();

  if (null == szDeviceIdentify) {
    return;
  }

  if ("" == szFileName) {
    alert("请选择升级文件！");
    return;
  }
  WebVideoCtrl.I_StartUpgrade(szDeviceIdentify, szFileName).then(
    function () {
      g_tUpgrade = setInterval(
        "getUpgradeStatus('" + szDeviceIdentify + "')",
        1000
      );
    },
    function () {
      clearInterval(g_tUpgrade);
      showOPInfo(szDeviceIdentify + " 升级失败！");
    }
  );
}

// 获取升级状态
async function getUpgradeStatus(szDeviceIdentify) {
  var bUpdating = await WebVideoCtrl.I_UpgradeStatus(szDeviceIdentify);
  if (bUpdating) {
    var iProcess = await WebVideoCtrl.I_UpgradeProgress(szDeviceIdentify);
    if (iProcess < 0) {
      clearInterval(g_tUpgrade);
      g_tUpgrade = 0;
      showOPInfo(szDeviceIdentify + " 获取进度失败！");
      return;
    } else if (iProcess < 100) {
      if (0 == $("#restartDiv").length) {
        $("<div id='restartDiv' class='freeze'></div>").appendTo("body");
        var oSize = getWindowSize();
        $("#restartDiv").css({
          width: oSize.width + "px",
          height: oSize.height + "px",
          lineHeight: oSize.height + "px",
          left: 0,
          top: 0,
        });
      }
      $("#restartDiv").text(iProcess + "%");
    } else {
      await WebVideoCtrl.I_StopUpgrade();
      clearInterval(g_tUpgrade);
      g_tUpgrade = 0;

      $("#restartDiv").remove();

      WebVideoCtrl.I_Restart(szDeviceIdentify, {
        success: function (xmlDoc) {
          $("<div id='restartDiv' class='freeze'>重启中...</div>").appendTo(
            "body"
          );
          var oSize = getWindowSize();
          $("#restartDiv").css({
            width: oSize.width + "px",
            height: oSize.height + "px",
            lineHeight: oSize.height + "px",
            left: 0,
            top: 0,
          });
          setTimeout("reconnect('" + szDeviceIdentify + "')", 20000);
        },
        error: function (oError) {
          showOPInfo(
            szDeviceIdentify + " 重启失败！",
            oError.errorCode,
            oError.errorMsg
          );
        },
      });
    }
  } else {
    await WebVideoCtrl.I_StopUpgrade();
    clearInterval(g_tUpgrade);
    g_tUpgrade = 0;

    $("#restartDiv").remove();

    WebVideoCtrl.I_Restart(szDeviceIdentify, {
      success: function () {
        $("<div id='restartDiv' class='freeze'>重启中...</div>").appendTo(
          "body"
        );
        var oSize = getWindowSize();
        $("#restartDiv").css({
          width: oSize.width + "px",
          height: oSize.height + "px",
          lineHeight: oSize.height + "px",
          left: 0,
          top: 0,
        });
        setTimeout("reconnect('" + szDeviceIdentify + "')", 20000);
      },
      error: function (oError) {
        showOPInfo(
          szDeviceIdentify + " 重启失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 检查插件版本
function clickCheckPluginVersion() {
  var szDeviceIdentify = $("#ip").val();
  WebVideoCtrl.I_CheckPluginVersion().then(
    (bNeedUpdate) => {
      if (bNeedUpdate) {
        alert("检测到新的插件版本！");
      } else {
        alert("您的插件版本已经是最新的！");
      }
    },
    () => {
      showOPInfo(szDeviceIdentify + " 检测插件新版本失败");
    }
  );
}

function clickRestoreDefault() {
  var szDeviceIdentify = $("#ip").val(),
    szMode = "basic";
  WebVideoCtrl.I_RestoreDefault(szDeviceIdentify, szMode).then(
    () => {
      $("#restartDiv").remove();
      showOPInfo(szDeviceIdentify + " 恢复默认参数成功！");
    },
    (oError) => {
      showOPInfo(
        szDeviceIdentify + " 恢复默认参数失败！",
        oError.errorCode,
        oError.errorMsg
      );
    }
  );
}

function PTZZoomIn() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(10, false, {
      iWndIndex: g_iWndIndex,
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 调焦+成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + "  调焦+失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

function PTZZoomout() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(11, false, {
      iWndIndex: g_iWndIndex,
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 调焦-成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + "  调焦-失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

function PTZZoomStop() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(11, true, {
      iWndIndex: g_iWndIndex,
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 调焦停止成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + "  调焦停止失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

function PTZFocusIn() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(12, false, {
      iWndIndex: g_iWndIndex,
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦+成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + "  聚焦+失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

function PTZFoucusOut() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(13, false, {
      iWndIndex: g_iWndIndex,
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦-成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + "  聚焦-失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

function PTZFoucusStop() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(12, true, {
      iWndIndex: g_iWndIndex,
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦停止成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + "  聚焦停止失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

function PTZIrisIn() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(14, false, {
      iWndIndex: g_iWndIndex,
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 光圈+成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + "  光圈+失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

function PTZIrisOut() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(15, false, {
      iWndIndex: g_iWndIndex,
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 光圈-成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + "  光圈-失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

function PTZIrisStop() {
  var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);

  if (oWndInfo != null) {
    WebVideoCtrl.I_PTZControl(14, true, {
      iWndIndex: g_iWndIndex,
      success: function (xmlDoc) {
        showOPInfo(oWndInfo.szDeviceIdentify + " 光圈停止成功！");
      },
      error: function (oError) {
        showOPInfo(
          oWndInfo.szDeviceIdentify + "  光圈停止失败！",
          oError.errorCode,
          oError.errorMsg
        );
      },
    });
  }
}

// 切换模式
function changeIPMode(iType) {
  var arrPort = [0, 7071, 80];

  $("#serverport").val(arrPort[iType]);
}

// 获取设备IP，B1暂不支持
// function clickGetDeviceIP() {
//     var iDeviceMode = parseInt($("#devicemode").val(), 10),
//         szAddress = $("#serveraddress").val(),
//         iPort = parseInt($("#serverport").val(), 10) || 0,
//         szDeviceID = $("#deviceid").val(),
//         szDeviceInfo = "";

//     szDeviceInfo = WebVideoCtrl.I_GetIPInfoByMode(iDeviceMode, szAddress, iPort, szDeviceID);

//     if ("" == szDeviceInfo) {
//         showOPInfo("设备IP和端口解析失败！");
//     } else {
//         showOPInfo("设备IP和端口解析成功！");

//         var arrTemp = szDeviceInfo.split("-");
//         $("#loginip").val(arrTemp[0]);
//         $("#deviceport").val(arrTemp[1]);
//     }
// }

// 启用多边形绘制
var g_bEnableDraw = false;
function clickEnableDraw() {
  WebVideoCtrl.I_SetPlayModeType(6).then(
    () => {
      g_bEnableDraw = true;
      showOPInfo("启用绘制成功！");
    },
    (oError) => {
      showOPInfo("启用绘制失败！", oError.errorCode, oError.errorMsg);
    }
  );
}

// 禁用多边形绘制
function clickDisableDraw() {
  WebVideoCtrl.I_SetSnapDrawMode(0, -1).then(
    () => {
      g_bEnableDraw = false;
      showOPInfo("禁用绘制成功！");
    },
    (oError) => {
      showOPInfo("禁用绘制失败！", oError.errorCode, oError.errorMsg);
    }
  );
}

// 添加图形，最多不超过16个图形
function clickAddSnapPolygon() {
  if (!g_bEnableDraw) {
    return;
  }

  var szId = $("#snapId").val();
  var szName = encodeString($("#snapName").val());

  var szInfo = "<?xml version='1.0' encoding='utf-8'?>";
  szInfo += "<SnapPolygonList>";
  szInfo += "<SnapPolygon>";
  szInfo += "<id>" + szId + "</id>"; // [1, 32]
  szInfo += "<polygonType>0</polygonType>"; //如果想绘制多边形，polygonType指需要改为1
  szInfo += "<PointNumMax>17</PointNumMax>"; // [MinClosed, 17]
  szInfo += "<MinClosed>4</MinClosed>"; // [4, 17]
  szInfo += "<tips>#" + szId + "#" + szName + "</tips>";
  szInfo += "<isClosed>false</isClosed>";
  szInfo += "<color><r>0</r><g>255</g><b>0</b></color>";
  szInfo += "<pointList/>";
  szInfo += "</SnapPolygon>";
  szInfo += "</SnapPolygonList>";

  WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then(() => {
    showOPInfo("添加图形成功！");
  });
  WebVideoCtrl.I_SetSnapDrawMode(g_iWndIndex, 2);
}

// 删除图形
function clickDelSnapPolygon() {
  if (!g_bEnableDraw) {
    return;
  }

  var szId = $("#snapId").val();
  var aShapes = [];
  aShapes.push({
    polygonType: 0,
    id: szId,
  });

  WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex, aShapes);
}

// 获取图形，保存到自己数据库中
function clickGetSnapPolygon() {
  WebVideoCtrl.I_GetSnapPolygonInfo(g_iWndIndex).then((szXml) => {
    alert(szXml);
  });
}

// 设置图形，页面打开时可以设置以前设置过的图形
function clickSetSnapPolygon() {
  if (!g_bEnableDraw) {
    return;
  }

  WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex);

  var szInfo = "<?xml version='1.0' encoding='utf-8'?>";
  szInfo += "<SnapPolygonList>";
  szInfo += "<SnapPolygon>";
  szInfo += "<id>1</id>";
  szInfo += "<polygonType>1</polygonType>";
  szInfo += "<tips>#1#设置1</tips>";
  szInfo += "<isClosed>true</isClosed>";
  szInfo += "<color><r>0</r><g>255</g><b>0</b></color>";
  szInfo += "<pointList>";
  szInfo += "<point><x>0.737903</x><y>0.229730</y></point>";
  szInfo += "<point><x>0.947581</x><y>0.804054</y></point>";
  szInfo += "<point><x>0.362903</x><y>0.777027</y></point>";
  szInfo += "</pointList>";
  szInfo += "</SnapPolygon>";
  szInfo += "<SnapPolygon>";
  szInfo += "<id>2</id>";
  szInfo += "<polygonType>0</polygonType>";
  szInfo += "<tips>#2#设置2</tips>";
  szInfo += "<isClosed>true</isClosed>";
  szInfo += "<color><r>255</r><g>255</g><b>0</b></color>";
  szInfo += "<pointList>";
  szInfo += "<point><x>0.2</x><y>0.2</y></point>";
  szInfo += "<point><x>0.8</x><y>0.2</y></point>";
  szInfo += "<point><x>0.8</x><y>0.8</y></point>";
  szInfo += "<point><x>0.2</x><y>0.8</y></point>";
  szInfo += "</pointList>";
  szInfo += "</SnapPolygon>";
  szInfo += "</SnapPolygonList>";

  WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then(
    () => {
      showOPInfo("设置图形成功！");
    },
    (oError) => {
      showOPInfo("设置图形失败！", oError.errorCode, oError.errorMsg);
    }
  );
}

// 清空图形
function clickDelAllSnapPolygon() {
  if (!g_bEnableDraw) {
    return;
  }

  WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex).then(
    () => {
      showOPInfo("清空图形成功！");
    },
    (oError) => {
      showOPInfo("清空图形失败！", oError.errorCode, oError.errorMsg);
    }
  );
}

// 设备抓图
function clickDeviceCapturePic() {
  var szInfo = "";
  var szDeviceIdentify = $("#ip").val();
  var bZeroChannel =
    $("#channels option")
      .eq($("#channels").get(0).selectedIndex)
      .attr("bZero") == "true"
      ? true
      : false;
  var iChannelID = parseInt($("#channels").val(), 10);
  var iResolutionWidth = parseInt($("#resolutionWidth").val(), 10);
  var iResolutionHeight = parseInt($("#resolutionHeight").val(), 10);

  if (null == szDeviceIdentify) {
    return;
  }

  if (bZeroChannel) {
    // 零通道不支持设备抓图
    return;
  }

  var szPicName =
    szDeviceIdentify + "_" + iChannelID + "_" + new Date().getTime();
  var iRet = WebVideoCtrl.I_DeviceCapturePic(
    szDeviceIdentify,
    iChannelID,
    szPicName,
    {
      bDateDir: true, //是否生成日期文件
      iResolutionWidth: iResolutionWidth,
      iResolutionHeight: iResolutionHeight,
    }
  );

  if (0 == iRet) {
    szInfo = "设备抓图成功！";
  } else {
    szInfo = "设备抓图失败！";
  }
  showOPInfo(szDeviceIdentify + " " + szInfo);
}

function loadXML(szXml) {
  if (null == szXml || "" == szXml) {
    return null;
  }

  var oXmlDoc = null;

  if (window.DOMParser) {
    var oParser = new DOMParser();
    oXmlDoc = oParser.parseFromString(szXml, "text/xml");
  } else {
    oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    oXmlDoc.async = false;
    oXmlDoc.loadXML(szXml);
  }

  return oXmlDoc;
}

function toXMLStr(oXmlDoc) {
  var szXmlDoc = "";

  try {
    var oSerializer = new XMLSerializer();
    szXmlDoc = oSerializer.serializeToString(oXmlDoc);
  } catch (e) {
    try {
      szXmlDoc = oXmlDoc.xml;
    } catch (e) {
      return "";
    }
  }
  if (szXmlDoc.indexOf("<?xml") == -1) {
    szXmlDoc = "<?xml version='1.0' encoding='utf-8'?>" + szXmlDoc;
  }

  return szXmlDoc;
}

function encodeString(str) {
  if (str) {
    return str
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;");
  } else {
    return "";
  }
}
